/*
** libpud.h for libpud in mrcellophane/ftrace/src/libpud
** 
** Made by solomon hykes
** Login   <torgau@gmail.com>
** 
** Started on  Tue Apr 26 18:37:04 2005 solomon hykes
** Last update Sat Jul  9 22:30:02 2005 solomon hykes
*/

#ifndef PUD_H_
# define PUD_H_

#include "pud_types.h"

# define DEBUG

/* Creating a pud_process */

pud_process	*pud_attach(pid_t pid);
t_ret		pud_trace_me();
pud_process	*pud_launch(char *args[]);
pud_process	*pud_dup(pud_process *p);
void		pud_release(pud_process *p);

/* Detaching or stopping a process */

t_ret		pud_detach(pud_process *proc);

/* Controlling execution */

t_ret		pud_continue(pud_process *proc, int sig);
t_ret		pud_continue_at(pud_process *proc, int sig, u_long addr);

t_ret		pud_step(pud_process *proc, int sig);
t_ret		pud_step_at(pud_process *proc, int sig, u_long addr);

/* Program pointer */

u_long		pud_pc_get(pud_process *proc);
t_ret		pud_pc_set(pud_process *proc, u_long val);


/* Stack pointer */

u_long		pud_stackp_get(pud_process *proc);
t_ret		pud_stackp_set(pud_process *proc, u_long val);


/* Memory  */

size_t		pud_mem_read(pud_process *proc, u_long addr, char *buf, size_t len);
size_t		pud_mem_write(pud_process *proc, u_long addr, char *buf, size_t len);
u_long		pud_mem_alloc(pud_process *proc, size_t size, u_long prot, u_long flags);

/* Event */
pud_event	*pud_next_event(pud_process *proc);
pud_event	*pud_last_event(pud_process *proc);

void		pud_print_event(pud_process *proc, pud_event *ev);

/* Memory maps */
pud_map		*pud_get_maps(pud_process *proc);

/* Setting a saved state */
t_ret		pud_set_state(pud_process *p, pud_process *s);


#endif /* PUD_H_ */
